/**
 * 
 */
package fecat.util;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

import fecat.services.log.LoggingService;
/**
 * @author ibm
 *
 */
public class DesEncrypter {
	private static DesEncrypter desEncrypter;
	public static DesEncrypter getInitance(){
		if(desEncrypter==null){
			desEncrypter=new DesEncrypter();
		}
		return desEncrypter;
	}
	Cipher ecipher;
	Cipher dcipher;
	private DesEncrypter(){
		SecretKey key;
		try {
			key = KeyGenerator.getInstance("DES").generateKey();
			ecipher = Cipher.getInstance("DES");
			dcipher = Cipher.getInstance("DES");
			ecipher.init(Cipher.ENCRYPT_MODE, key);
			dcipher.init(Cipher.DECRYPT_MODE, key);
		} catch (Exception ex) {
			LoggingService.error(ex);
		}
	}

	public String encrypt(String str) throws Exception {
		// Encode the string into bytes using utf-8
		byte[] utf8 = str.getBytes("UTF8");

		// Encrypt
		byte[] enc = ecipher.doFinal(utf8);

		// Encode bytes to base64 to get a string
		return new sun.misc.BASE64Encoder().encode(enc);
	}

	public String decrypt(String str) throws Exception {
		// Decode base64 to get bytes
		byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);

		byte[] utf8 = dcipher.doFinal(dec);

		// Decode using utf-8
		return new String(utf8, "UTF8");
	}
	public static void main(String[] argv) throws Exception {
		String ss="127.0.0.1";
		byte[] b=ss.getBytes();
		SecretKey key = KeyGenerator.getInstance("DES").generateKey();
		DesEncrypter encrypter = DesEncrypter.getInitance();
		String encrypted = encrypter.encrypt("Don't tell anybody!");
		System.out.println(encrypted);
		String decrypted = encrypter.decrypt(encrypted);
		System.out.println(decrypted);
	}

}
